<html>
<body>
报告在非 <code>volatile</code> 字段值上自旋，等待它被另一个线程更改的 <code>while</code> 循环。
<p>
除了在循环内完成少量工作时可能会非常耗费 CPU 之外，此类循环很可能具有与预期不同的语义。
即便另一个线程更改了该字段的值，Java 内存模型也允许此类循环永不完成。
</p>
<p>
此外，自 Java 9 起，建议在 <code>volatile</code> 字段上的自旋循环中调用 <code>Thread.onSpinWait()</code>，这可能会显著提高某些硬件上的性能。
</p>
<p><b>示例：</b></p>
<pre><code>
  class SpinsOnField {
    boolean ready = false;

    void run() {
      while (!ready) {
      }
      // 执行某些工作
    }

    void markAsReady() {
      ready = true;
    }
  }
</code></pre>
<p>在应用快速修复后：</p>
<pre><code>
  class SpinsOnField {
    volatile boolean ready = false;

    void run() {
      while (!ready) {
        Thread.onSpinWait();
      }
      // 执行某些工作
    }

    void markAsReady() {
      ready = true;
    }
  }
</code></pre>
<!-- tooltip end -->
<p>
使用检查选项可仅报告空的 <code>while</code> 循环。
<p>
</body>
</html>